package co.edu.uniandes.bi.etl.audi.sol;

import java.text.ParseException;
import java.util.List;
import java.util.Vector;

import co.edu.uniandes.bi.etl.Activity;
import co.edu.uniandes.bi.etl.audi.BusquedaTweets;
import co.edu.uniandes.bi.etl.audi.CSVSourceActivity;
import co.edu.uniandes.bi.etl.audi.CargarTweets;
import co.edu.uniandes.bi.etl.audi.Constantes;
import co.edu.uniandes.bi.etl.audi.HechosMonitoreo;
import co.edu.uniandes.bi.etl.audi.JDBCDestinationActivity;

public class ETL_MONyPUB 
{
	private List<Activity> initialActivities;
	private CSVSourceActivity loadContents;
	private CSVSourceActivity loadCategories;
	private JDBCDestinationActivity dimensionContenido;
	private JDBCDestinationActivity dimensionCategoriasAutos;
	private BusquedaTweets tweetsActivity;
	//carlos
	private CargarTweets loadTweetsActivity;
	private HechosMonitoreo hechosMonitoreo;
	
	public ETL_MONyPUB()
	{
		inicializarHechosMonitoreo();
		inicializarLoadTweersActivity();
		inicializarTweetsActivity();		
		
		InicializarDimensionContenidos();
		inicializarContenidos();
		
		inicializarDimensionCategorias();
		inicializarCategorias();
		
		//Inicializar las actividades que son cabeza de hilos.
		initialActivities = new Vector<Activity>();
		initialActivities.add(loadCategories);
	}
	
	
	private void inicializarHechosMonitoreo() 
	{
		hechosMonitoreo = new HechosMonitoreo();
	}


	private void inicializarLoadTweersActivity() 
	{
		loadTweetsActivity = new CargarTweets();
		loadTweetsActivity.setNextActivity(hechosMonitoreo);
	}


	private void inicializarTweetsActivity()
	{
		tweetsActivity = new BusquedaTweets();
		tweetsActivity.setNombreCampoBusqueda("CONTENIDO");
		//carlos
		tweetsActivity.setNextActivity(loadTweetsActivity);
	}
	
	private void inicializarDimensionCategorias()
	{
		dimensionCategoriasAutos = new JDBCDestinationActivity();
		dimensionCategoriasAutos.setTargetTable(Constantes.TAB_CATEGORIAAUTOS);
		List<String> list = new Vector<String>();
		list.add("CATEGORIA_CONTENIDO");
		list.add("SERIE_AUTO");
		list.add("MODELO");
		
		List<String> tableFields = new Vector<String>();
		tableFields.add("CategoriaContenidos");
		tableFields.add("SerieAuto");
		tableFields.add("Modelo");
		dimensionCategoriasAutos.setMappings(list, tableFields);
		dimensionCategoriasAutos.setNextActivity(loadContents);
	}
	
	private void inicializarCategorias()
	{
		loadCategories = new CSVSourceActivity();
		loadCategories.setCSVFilePath(Constantes.path_categorias);
		loadCategories.setNextActivity(dimensionCategoriasAutos);
	}
	
	private void InicializarDimensionContenidos()
	{
		dimensionContenido = new JDBCDestinationActivity();
		dimensionContenido.setTargetTable(Constantes.TAB_CONTENIDOS);
		List<String> list = new Vector<String>();
		list.add("MEDIO_DIGITAL");
		list.add("TIPO_CONTENIDO");
		list.add("CONTENIDO");
		
		List<String> tableFields = new Vector<String>();
		tableFields.add("MedioDigital");
		tableFields.add("TipoContenido");
		tableFields.add("Contenido");
		dimensionContenido.setMappings(list, tableFields);
		dimensionContenido.setNextActivity(tweetsActivity);
	}
	
	private void inicializarContenidos()
	{
		loadContents = new CSVSourceActivity();
		loadContents.setCSVFilePath(Constantes.path_contenidos);
		loadContents.setNextActivity(dimensionContenido);
	}
	
	public static void main(String...strings) throws ParseException
	{
		ETL_MONyPUB s = new ETL_MONyPUB();
		for(Activity a : s.initialActivities)
			a.execute();
	}	
}
